import { Injectable } from '@angular/core';
// 导入 Angular 的 Injectable 装饰器，用于标记服务可以被 Angular 的依赖注入系统管理。

import { BehaviorSubject } from 'rxjs';
// 从 RxJS 导入 BehaviorSubject 类，用于创建可观察对象（Observable）。

@Injectable({
  providedIn: 'root'
})
// 使用 @Injectable 装饰器定义一个可以在整个应用范围内被注入的服务。
export class LoadingIndicatorService {
  private loadingSubject = new BehaviorSubject<boolean>(false);
  // 创建一个 BehaviorSubject 实例，初始值为 false。BehaviorSubject 是一种特殊的 Subject，
  // 它可以保持一个值，并且新订阅者可以访问到这个最新的值。

  public loading$ = this.loadingSubject.asObservable();
  // 使用 BehaviorSubject 的 asObservable 方法创建一个可观察对象（Observable），用于订阅 loadingSubject 的值。

  showLoading(): void {
    this.loadingSubject.next(true);
    // 当调用 showLoading 方法时，将 loadingSubject 的值设置为 true，表示加载指示器应该显示。
  }

  hideLoading(): void {
    this.loadingSubject.next(false);
    // 当调用 hideLoading 方法时，将 loadingSubject 的值设置为 false，表示加载指示器应该隐藏。
  }
}
